package com.iwhalecloud.bss.kite.cucc.web.service.bigdata.util;

import com.iwhalecloud.bss.kite.common.util.KiteListUtils;
import com.iwhalecloud.bss.kite.common.util.KiteStringUtils;
import com.iwhalecloud.bss.kite.cucc.client.dto.cust.CuccContextCustDTO;

import com.iwhalecloud.bss.kite.domain.inst.repository.SceneInstRepository;
import com.iwhalecloud.bss.kite.manager.api.IOperateSceneInstService;
import com.iwhalecloud.bss.kite.manager.api.IQuerySceneInstService;
import com.iwhalecloud.bss.kite.manager.inst.KiteAttr;
import com.iwhalecloud.bss.kite.manager.inst.KiteAttrValue;
import com.iwhalecloud.bss.kite.manager.inst.KiteOfferInst;
import com.iwhalecloud.bss.kite.manager.inst.KiteProdInst;
import com.iwhalecloud.bss.kite.web.context.KiteWebContext;
import com.ztesoft.bss.common.util.SpringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

@Service
public class ProductAttrHandler {
    @Autowired
    private IQuerySceneInstService querySceneInstService;
    @Autowired
    private IOperateSceneInstService operateSceneInstService;

    public static ProductAttrHandler getInst() {
        return SpringUtil.getBean(ProductAttrHandler.class);
    }
    public void AddProdSelectToAttr(String sceneInstId,String offerId){

        List<KiteOfferInst> kiteOfferInsts = querySceneInstService.listMainOfferInsts(sceneInstId);
        if(KiteListUtils.isNotEmpty(kiteOfferInsts)){
            List<String> keys =  kiteOfferInsts.stream().map(it->it.getOfferId()).collect(Collectors.toList());
            //需求：
            //1:数达信息，只选择外呼，只选择失联复联时，数据服务费的服务费计费类型能选择所有，其他情况只能选择按下发量计费。
            //2:营销渠道中选中“短信”，数据服务费中出现“短信数据服务费-信用卡（元）”和“短信数据服务费-非信用卡（元）”;
            //  营销渠道中选中“外呼”，业务开通中选中“失联复联”，数据服务费中出现“身份验证数据费-保险行业（元）”和“身份验证数据费-非保险行业（元)”;
            //  营销渠道中选中“外呼”，业务开通中选中“批量营销”，数据服务费中出现“标签筛选数据服务费（元）”和“IMEI数据服务费（元）”。
            //数达信息处理
            if(keys.contains("10003950")){
                //offerId为操作的项，比如操作短信，那么offerId传过来的是200000000001319，如果keys之前就有，说明此次是取消选中操作，需从keys去除，如果keys之前没有，说明当前是选中操作，则需添加到keys。
                if(keys.contains(offerId)) {
                    keys = keys.stream().filter(it->!KiteStringUtils.equals(offerId,it)).collect(Collectors.toList());
                } else {
                    keys.add(offerId);
                }
                //过滤kiteOfferInsts，找到数据服务费offerInst，sku"200000000001591"
                KiteOfferInst offerInst = kiteOfferInsts.stream().filter(it -> KiteStringUtils.equals(it.getOfferId(), "200000000001591")).findFirst().orElse(null);
                if(Objects.nonNull(offerInst)){
                    CuccContextCustDTO custDTO1 = (CuccContextCustDTO) KiteWebContext.getContext().getCust();
                    List<KiteProdInst> prodInsts = querySceneInstService.listProdInstsFromOfferInst(custDTO1.getCustId(), offerInst.getOfferInstId());
                    //需求1只选择外呼，只选择失联复联时，数据服务费的服务费计费类型能选择所有，其他情况只能选择按下发量计费。
                    KiteProdInst prodInst = prodInsts.get(0);
                    KiteAttr kiteAttr = new KiteAttr();
                    kiteAttr.setAttrValueTypeId("98A");
                    kiteAttr.setIsNull("F");
                    kiteAttr.setAttrId("2021033122");//选择项：1_按下发量计费:100000503、2_按接通量计费:100000563
                    List<KiteAttrValue> kiteAttrValues = SceneInstRepository.getKiteAttrValues(kiteAttr);
                    //失联复联sku:200000000001320，外呼：200000000001318，批量营销：200000000001321，短信：200000000001319，
                    if(!(keys.contains("200000000001320")&&keys.contains("200000000001318")&&!keys.contains("200000000001321")&&!keys.contains("200000000001319"))){
                       //如果不是(只选择外呼，只选择失联复联)，那么，服务费计费类型过滤选择出不是2_按接通量计费:100000563的，即是1_按下发量计费:100000503，只能选择1_按下发量计费。
                        kiteAttrValues = kiteAttrValues.stream().filter(kts->!KiteStringUtils.equals(kts.getAttrValue(),"100000563")).collect(Collectors.toList());
                    }
                    //服务费计费类型"200001005"
                    prodInst.getAttr("200001005").setAttrValues(kiteAttrValues);

                    //需求2
                    //初始化为都显示
                    prodInst.getAttr("200001006").setShowType("D");
                    prodInst.getAttr("200001007").setShowType("D");
                    prodInst.getAttr("200001010").setShowType("D");
                    prodInst.getAttr("200001011").setShowType("D");
                    prodInst.getAttr("200001008").setShowType("D");
                    prodInst.getAttr("200001009").setShowType("D");
                    if(keys.contains("200000000001319")&&!keys.contains("200000000001318")){
                        //选中短信，未选中外呼时，数据服务费中出现“短信数据服务费-信用卡（元）”和“短信数据服务费-非信用卡（元）”，其余4个隐藏
                        prodInst.getAttr("200001006").setShowType("H");
                        prodInst.getAttr("200001007").setShowType("H");
                        prodInst.getAttr("200001008").setShowType("H");
                        prodInst.getAttr("200001009").setShowType("H");
                    }else if(keys.contains("200000000001319")&&keys.contains("200000000001318")&&keys.contains("200000000001321")&&!keys.contains("200000000001320")){
                        //选中短信，选中外呼，选中批量营销，未选中失联复联时，数据服务费中出现“短信数据服务费-信用卡（元）”和“短信数据服务费-非信用卡（元）”和“标签筛选数据服务费（元）”和“IMEI数据服务费（元）”。
                        prodInst.getAttr("200001008").setShowType("H");
                        prodInst.getAttr("200001009").setShowType("H");
                    }else if(keys.contains("200000000001319")&&keys.contains("200000000001318")&&keys.contains("200000000001320")&&!keys.contains("200000000001321")){
                        //选中短信，选中外呼，选中失联复联，未选中批量营销时，数据服务费中出现“短信数据服务费-信用卡（元）”和“短信数据服务费-非信用卡（元）”和“身份验证数据费-保险行业（元）”和“身份验证数据费-非保险行业（元）”。
                        prodInst.getAttr("200001006").setShowType("H");
                        prodInst.getAttr("200001007").setShowType("H");
                    }else if(!keys.contains("200000000001319")&&keys.contains("200000000001318")&&keys.contains("200000000001321")&&!keys.contains("200000000001320")){
                        //未选中短信，选中外呼，选中批量营销，未选中失联复联时，数据服务费中出现“标签筛选数据服务费（元）”和“IMEI数据服务费（元）”。
                        prodInst.getAttr("200001010").setShowType("H");
                        prodInst.getAttr("200001011").setShowType("H");
                        prodInst.getAttr("200001008").setShowType("H");
                        prodInst.getAttr("200001009").setShowType("H");
                    }else if(!keys.contains("200000000001319")&&keys.contains("200000000001318")&&keys.contains("200000000001320")&&!keys.contains("200000000001321")){
                        //未选中短信，选中外呼，选中失联复联，未选中批量营销时，数据服务费中出现“身份验证数据费-保险行业（元）”和“身份验证数据费-非保险行业（元）”。
                        prodInst.getAttr("200001006").setShowType("H");
                        prodInst.getAttr("200001007").setShowType("H");
                        prodInst.getAttr("200001010").setShowType("H");
                        prodInst.getAttr("200001011").setShowType("H");
                    }else if(!keys.contains("200000000001319")&&keys.contains("200000000001318")&&keys.contains("200000000001320")&&keys.contains("200000000001321")){
                        //未选中短信，选中外呼，选中失联复联，选中批量营销时,数据服务费中出现“标签筛选数据服务费（元）”和“IMEI数据服务费（元）”和“身份验证数据费-保险行业（元）”和“身份验证数据费-非保险行业（元）”。
                        prodInst.getAttr("200001010").setShowType("H");
                        prodInst.getAttr("200001011").setShowType("H");
                    }

                    operateSceneInstService.addProdInst(sceneInstId,prodInst);
                }

            }
        }


    }
}
